package cn.gjxblog.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 作用:
 * 作者:gjx
 * 版本:V1.0
 * 创建时间: 2018/7/29 20:21
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/login")
    public String login(String username,String password,boolean rememberMe){
        //在web环境中安全管理器会自动进行初始化
        Subject subject = SecurityUtils.getSubject();

        subject.logout();
        try {
            subject.login(new UsernamePasswordToken(username,password,rememberMe));
            return "redirect:/main.jsp";
        }catch (UnknownAccountException e){
            e.printStackTrace();
            return "redirect:/error.jsp";
        }catch (IncorrectCredentialsException e){
            e.printStackTrace();
            return "redirect:/error.jsp";
        }catch (AuthenticationException e) {
            e.printStackTrace();
            return "redirect:/error.jsp";
        }
    }

    /**
     * 第一种开发模式 编程式 api方法
     * 第二种开发模式 标签式jsp页 标签控制
     * 。。。。
     * 第三种授权开发模式 注解式开发
     * 使用动态代理技术 解耦合,扩展功能
     * 需要 cglib支持
     * @return
     */
    @RequiresRoles("root")
    @RequiresPermissions("user:add")
    @RequestMapping("/test")
    public String test(){
        return "test";
    }
}
